﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;

namespace PuanSunucusu
{
    public partial class frmPuanYukleme : XtraForm
    {
        private class Musteri
        {
            public string Kodu { get; set; }
            public string Unvani { get; set; }
            public decimal? Puan { get; set; }
            public decimal? AlisverisTutari { get; set; }
            public bool Sec { get; set; }
        }

        List<Musteri> _musteriler = new List<Musteri>();

        public frmPuanYukleme()
        {
            InitializeComponent();
        }

        private void frmPuanYukleme_Load(object sender, EventArgs e)
        {
            Liste();
        }

        private void Liste()
        {
            _musteriler.Clear();
            using (PromoEntities ent = new PromoEntities())
            {
                var list = (from c in ent.Cariler
                            join p in ent.BonusPuanlar on c.Kodu equals p.Cari_Kod into data
                            from x in data.DefaultIfEmpty()
                            select new Musteri { Kodu = c.Kodu, Unvani = c.Adi, Puan = x.Puan, AlisverisTutari = x.ToplamTutar, Sec = false }).ToArray();
                _musteriler.AddRange(list);

                gridControl1.DataSource = _musteriler;
                gridView1.BestFitColumns();

                gridView1.OptionsBehavior.Editable = true;
                for (int i = 0; i < gridView1.Columns.Count; i++)
                {
                    gridView1.Columns[i].OptionsColumn.AllowEdit = false;
                }

                gridView1.Columns[0].Caption = "Kodu";
                gridView1.Columns[1].Caption = "Unvani";
                gridView1.Columns[2].Caption = "Puan";
                gridView1.Columns[3].Caption = "Alisveriş Tutari";
                gridView1.Columns[4].Caption = "Seç";
                gridView1.Columns["Sec"].OptionsColumn.AllowEdit = true;
            }
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            if (Convert.ToDecimal(txtPuan.Text) < 0)
            {
                MessageBox.Show("Eksi değer giremezsiniz !");
                return;
            }

            using (PromoEntities ent = new PromoEntities())
            {
                for (int i = 0; i < gridView1.RowCount; i++)
                {
                    if (Convert.ToBoolean(gridView1.GetRowCellValue(i, gridView1.Columns["Sec"])) == true)
                    {
                        string carikod = gridView1.GetRowCellDisplayText(i, gridView1.Columns[0]);
                        BonusPuan puan = ent.BonusPuanlar.Where(x => x.Cari_Kod == carikod).FirstOrDefault();
                        if (puan != null)
                        {
                            if (rdYukle.Checked)
                            {
                                puan.Puan += Convert.ToDecimal(txtPuan.Text);
                            }
                            else
                            {
                                if (puan.Puan >= Convert.ToDecimal(txtPuan.Text))
                                {
                                    puan.Puan -= Convert.ToDecimal(txtPuan.Text);
                                }
                                else
                                {
                                    MessageBox.Show("Var olan puanından daha aşağı indirilemez !");
                                }
                            }
                        }
                        else
                        {
                            if (rdYukle.Checked)
                            {
                                BonusPuan bns = new BonusPuan();
                                bns.Puan = Convert.ToDecimal(txtPuan.Text);
                                bns.Cari_Kod = carikod;
                                bns.KrediBakiyesi = 0;
                                bns.KrediLimiti = 0;
                                bns.RiskBakiyesi = 0;
                                bns.RiskLimiti = 0;
                                bns.ToplamTutar = 0;
                                ent.AddToBonusPuanlar(bns);
                            }
                        }
                    }
                }
                ent.SaveChanges();
            }
            Liste();
        }
    }
}
